package cn.fl.product.service;

import cmm.mid.core.framework.dto.DataResultDTO;
import cmm.mid.core.framework.page.KeyValueVO;
import cmm.mid.core.framework.page.Pager;
import cn.cmm.base.framework.exception.BaseException;
import cn.fl.bizflow.vo.SysBizFlowRlVO;
import cn.fl.customer.vo.CstValidCardInfoVO;
import cn.fl.product.vo.*;
import cn.fl.system.vo.SysUlFilesRecVO;
import fl.flow.facade.flow.condition.SysFlowSHQueryCondition;
import fl.flow.facade.flow.dto.FlowStartParamsDTO;
import fl.flow.facade.flow.dto.SysFlowSHDTO;
import fl.spl.facade.bizflow.condition.SysBizFlowRlQC;
import fl.spl.facade.spl.condition.SplRlPsnQueryCondition;
import fl.spl.facade.spl.dto.SplInfoDTO;

import java.util.List;

public interface ISplBscInfoApplyService {
    /**
     * 通过主键信息查询供应商审核信息
     *
     * @param id
     * @return
     */
    public SplBscInfoApplyVO getSplBscInfoApplyById(Long id, Long splId);

    /**
     * 保存供应商变更信息
     *
     * @param vo
     * @return
     */
    public boolean saveBscInfoApply(SplBscInfoApplyVO vo) throws BaseException;

    /**
     * 启动供应商变更工作流程
     *
     * @param flowStartParamsDTO
     * @return
     * @throws BaseException
     */
    public DataResultDTO addSplApplyFlowStart(FlowStartParamsDTO flowStartParamsDTO) throws BaseException;

    /**
     * 分页查询供应商变更信息
     *
     * @param page
     * @return
     * @throws BaseException
     */
    public Pager searchSplApplyListPage(Pager page) throws BaseException;

    public List<KeyValueVO> getKvList() throws BaseException;

    /**
     * 检查供应商是否存在审核中的变更流程
     *
     * @param splId
     * @param sysCd
     * @param orgCd
     * @return true 存在 false 不存在
     * @throws BaseException
     */
    public boolean checkFlowStatus(Long splId, String sysCd, String orgCd) throws BaseException;

    /**
     * 判断供应商主要信息是否发生变化
     * @param entity
     * @param sysCd
     * @param orgCd
     * @throws BaseException
     */
    public void checkBscInfo(SplInfoDTO entity, String sysCd, String orgCd) throws BaseException;

    /**
     * 查询厂商下拉框数据
     * @return
     * @throws BaseException
     */
    public List<KeyValueVO> searchMfrKVList()throws BaseException;

    /**
     * 查询资本单位下拉框数据
     * @return
     * @throws BaseException
     */
    public List<KeyValueVO> searchCapUntCdList()throws BaseException;

    /**
     * 查询经营品牌下拉框数据
     * @return
     * @throws BaseException
     */
    public List<KeyValueVO> searchBrandList(String code)throws BaseException;

    /**
     * 查询企业性质下拉框数据
     * @return
     * @throws BaseException
     */
    public List<KeyValueVO> searchCorpTypCdList()throws BaseException;

    /**
     * 查询事业部下拉框数据
     * @return
     * @throws BaseException
     */
    public List<KeyValueVO> searchBuOrgCdList()throws BaseException;

    /**
     * 查询项目类型
     * @return
     * @throws BaseException
     */
    public List<KeyValueVO> searchPrjTypCdList()throws BaseException;

    /**
     * 查询供应商级别下拉框数据
     * @return
     * @throws BaseException
     */
    public List<KeyValueVO> searchSplLvlCdList()throws BaseException;

    /**
     * 查询立项级别下拉框数据
     * @return
     * @throws BaseException
     */
    public List<KeyValueVO> searchPrjLvlCdList()throws BaseException;

    /**
     * 获取唯一对象
     * @param id 主键
     * @return 对象DTO
     */
    public SplInfoVO selectSplInfoVOById(Long id)throws BaseException;

    /**
     * 联系人证件类型<KEY,VALUE>集合
     * @return <KEY,VALUE>集合
     */
    public List<KeyValueVO> searchCertTypCdList()throws BaseException;

    /**
     * 联系人类型
     * @return
     * @throws BaseException
     */
    public List<KeyValueVO> searchRlTypCdList()throws BaseException;

    /**
     * 分页查询所有
     * @param page
     * @return
     */
    public Pager searchSplRlPsnListPage(Pager page)throws BaseException;


    /**
     * 不分页查询所有
     * @param qc
     * @return
     * @throws BaseException
     */
    public List<SysBizFlowRlVO> searchSysBizFlowRlList(SysBizFlowRlQC qc)throws BaseException;

    /**
     * 验证客户身份证号码和名称是否有法律效应
     * @param certNm 客户姓名
     * @param certNo 客户身份证号
     * @return
     * @throws Exception
     */
    public CstValidCardInfoVO validateCstCert(String certNm, String certNo)throws BaseException;

    /**
     * 修改
     * @param entity
     * @return
     */
    public boolean modifySplInfoVO(SplInfoVO entity)throws BaseException;

    /**
     * 根据条件查询数据,其中系统代码、业务主键、动态表名中间字不能为空.
     * @param condition 查询条件对象
     * @return 集合
     * @throws BaseException
     */
    public List<SysFlowSHDTO> searchFlowSHList(SysFlowSHQueryCondition condition) throws BaseException;

    /**
     * 插入流程中的数据
     * @param list
     * @return
     * @throws BaseException
     */
    public boolean batchAddForFlow(List<SysBizFlowRlVO> list)throws BaseException;

    /**
     * 批量新增
     * @param list
     * @return
     * @throws BaseException
     */
    public boolean batchAdd(List<SysBizFlowRlVO> list)throws BaseException;

    /**
     * 供应商资料新增
     * @param fileList
     * @return
     * @throws BaseException
     */
    public boolean batchAddSysUlFilesList(List<SysUlFilesRecVO> fileList)throws BaseException;

    /**
     * 查询列表
     * @param qc
     * @return
     */
    public List<SplRlPsnVO> searchSplRlPsnVOList(SplRlPsnQueryCondition qc);

    /**
     * 通过主键信息查询供应商审核权限信息
     * @param applyId
     * @return
     */
    public List<SplBiApplyFlowRlVO> getSplApplyFlow(Long applyId);

    /**
     * 通过主键信息查询供应商主要联系人变更信息
     * @param id
     * @return
     */
    public List<SplBiApplyRlPsnVO> getSplRlPsnApplyById(Long id, Long applyId);

    /**
     * 保存主要联系人审核信息
     * @param vos
     * @throws BaseException
     */
    public void saveBiApplyRlPsn(List<SplBiApplyRlPsnVO> vos,Long applyId) throws BaseException;

    /**
     * 保存供应商审核权限信息
     * @param vo
     * @return
     */
    public boolean saveSplApplyFlow(SplBiApplyFlowRlVO vo);

    /**
     * 修改主要联系人其他信息
     * @param vos
     * @throws BaseException
     */
    public void modifySplBiPsn(List<SplRlPsnVO> vos) throws BaseException;

    /**
     * 判断车辆个数是否大于10辆
     * @param applyId
     * @return
     */
    public Integer getFlowNumcount(Long applyId);

    /**
     * 通过供应商id 判断该供应商是否存在变更中流程
     * @param splId
     * @return true 存在变更流程 false 不存在变更流程
     */
    public boolean checkModifyStatus(Long splId) throws BaseException;

    /**
     * 通过供应商id 判断该供应商是否存在审核中的流程
     *
     * @param splId
     * @return
     */
    public String getFlowMessage(Long splId) throws BaseException;

    /**
     * 供应商经营类型(新车)
     *
     * */
    public List<KeyValueVO> searchNewCarTyp() throws BaseException ;

    /**
     * 供应商经营类型(二手车)
     * */
    public List<KeyValueVO> searchUsedCarTyp() throws BaseException ;

    /**
     * 供应商经营范围
     * */
    public List<KeyValueVO> searchBizScopeTyp() throws BaseException ;

    /**
     * 供应商公司归属
     * */
    public List<KeyValueVO> searchOwnerCdList() throws BaseException ;
    /**
     * 新增供应商变更主表信息
     * */
    public Long addSplBscInfoApply(SplBscInfoApplyVO vo) throws BaseException ;
    /**
     * 检查供应商工商变更状态
     * */
    public boolean checkSplGSFlowStatus(Long splId) throws BaseException ;
}
